/**
 * 
 */
package org.swing.utility.jdbc.imp;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * @author lqnhu
 *
 */
public interface RowProcessor {
	/**
	 * Create an <code>Object[]</code> from the column values in one
	 * <code>ResultSet</code> row. The <code>ResultSet</code> should be
	 * positioned on a valid row before passing it to this method.
	 * Implementations of this method must not alter the row position of the
	 * <code>ResultSet</code>.
	 *
	 * @param rs
	 *            ResultSet that supplies the array data
	 * @throws SQLException
	 *             if a database access error occurs
	 * @return the newly created array
	 */
	public Object[] toArray(ResultSet rs) throws SQLException;

	/**
	 * Create a JavaBean from the column values in one <code>ResultSet</code>
	 * row. The <code>ResultSet</code> should be positioned on a valid row
	 * before passing it to this method. Implementations of this method must not
	 * alter the row position of the <code>ResultSet</code>.
	 * 
	 * @param <T>
	 *            The type of bean to create
	 * @param rs
	 *            ResultSet that supplies the bean data
	 * @param type
	 *            Class from which to create the bean instance
	 * @throws SQLException
	 *             if a database access error occurs
	 * @return the newly created bean
	 */
	public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException;

	/**
	 * Create a <code>List</code> of JavaBeans from the column values in all
	 * <code>ResultSet</code> rows. <code>ResultSet.next()</code> should
	 * <strong>not</strong> be called before passing it to this method.
	 * 
	 * @param <T>
	 *            The type of bean to create
	 * @param rs
	 *            ResultSet that supplies the bean data
	 * @param type
	 *            Class from which to create the bean instance
	 * @throws SQLException
	 *             if a database access error occurs
	 * @return A <code>List</code> of beans with the given type in the order
	 *         they were returned by the <code>ResultSet</code>.
	 */
	public <T> List<T> toBeanList(ResultSet rs, Class<T> type)
			throws SQLException;

	/**
	 * Create a <code>Map</code> from the column values in one
	 * <code>ResultSet</code> row. The <code>ResultSet</code> should be
	 * positioned on a valid row before passing it to this method.
	 * Implementations of this method must not alter the row position of the
	 * <code>ResultSet</code>.
	 *
	 * @param rs
	 *            ResultSet that supplies the map data
	 * @throws SQLException
	 *             if a database access error occurs
	 * @return the newly created Map
	 */
	public Map<String, Object> toMap(ResultSet rs) throws SQLException;
}
